Assignment allocates the result of the expression Y to the name or names in X.
If Y is an array expression, X must contain one or more names which are variables, system variables, or are undefined. Following assignment, the name(s) in X become variable(s) with value(s) taken from the result of the expression Y.
If X contains a single name, the variable assumes the value of Y. If X contains multiple names then Y can be a single-item array of any rank (including a scalar) or a vector. If Y is a single-item array, the scalar value ⊃Y is assigned to all names in X. Otherwise, each element of Y is assigned to the corresponding name in X. Although not mandatory, Dyalog recommends that the names in X are enclosed in parentheses to reduce potential ambiguity in assignment statements.
The assignment arrow (or specification arrow) is often read as 'Is' or 'Gets'.
Examples of single assignment
A←2.3 A 2.3 A←⍳3 A 1 2 3
Examples of multiple assignment using parentheses
(A B)←2 A 2 B 2 (P ⎕IO Q)←'TEXT' 1 (1 2 3) P TEXT ⎕IO 1 Q 1 2 3
Example of multiple assignment without parentheses
year month day←2017 05 24 day 24 month 5 year 2017
Implementation note: erroneous expressions such as var 3←5 will result in 5 being assigned to var, even though a SYNTAX ERROR will be generated. In the case of (var 3)←5 no assignment will be made.
Pass-through assignments are permitted. The value of Y is carried through each assignment:
I←J←K←0 I,J,K 0 0 0
Function Assignment
If Y is a function expression, X must be a single name which is either undefined, or is the name of an existing function or defined operator. X may not be the name of a system function, or a primitive symbol.
Examples
PLUS←+ PLUS + SUM←+/ SUM +/ MEAN←{(+/⍵)÷⍴⍵}
Namespace Reference Assignment
If an expression evaluates to a namespace reference, or ref, you may assign it to a name. A name assigned to a simple scalar ref, has name class 9, whereas one assigned to an array containing refs has name class 2.
'f1'⎕WC'Form' 'ns1' ⎕NS '' N←ns1 ⎕NC'N' ⍝ name class of a scalar ref 9 F←f1 ⎕NC'F' ⍝ name class of a scalar ref 9 refs←N F ⍝ vector of refs. ⎕NC'refs' ⍝ nameclass of vector. 2 F2←2⊃refs ⎕NC 'F2' 9
Re-Assignment
A name that already exists may be assigned a new value if the assignment will not alter its name class, or will change it from 2 to 9 or vice versa. The table of permitted re-assignments is as follows:
Ref | Variable | Function | Operator | |
---|---|---|---|---|
Ref | Yes | Yes | ||
Variable | Yes | Yes | ||
Function | Yes | Yes | ||
Operator | Yes | Yes |